package cn.wzx.controller;

import cn.wzx.entity.CartBook;
import cn.wzx.entity.MyUser;
import cn.wzx.entity.OrdItem;
import cn.wzx.entity.Order;
import cn.wzx.respJson.RespJson;
import cn.wzx.respJson.Token;
import cn.wzx.service.CartService;
import cn.wzx.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@CrossOrigin // 允许跨域访问
@Controller
@RequestMapping("/api/fore/cart")
public class CartController {
    @Autowired
    CartService cartService;
    @Autowired
    OrderService orderService;

    // 用户购物车全查询
    @ResponseBody
    @RequestMapping("/findAll")
    public Map<String, Object> findAll() {
        Map<String, Object> map = new HashMap<>();
        // 获取到登录后的token，从中获取到登录者的信息，从而获取到用户ID
        MyUser user = (MyUser)Token.getUser();
        int uid = user.getId();
        // 如果没有获取到 ID说明没有登录， 则返回401未登录的状态
        if (uid < 0) return RespJson.pack(401,"未登录",null);
        // 通过获取到的用户id来查询到这个用户的购物车
        List<CartBook> lst = cartService.findAll(uid);
        map.put("carts", lst);
        return RespJson.pack(200, "", lst);
    }

    // 购物车的内容转订单
    @ResponseBody
    @RequestMapping({"/addCart2Order"})
    // @RequestBody  会根据json字符串中的key来匹配对应实体类的属性，
    // 如果匹配一致且json中的该key对应的值符合或可转换为实体类的对应
    // 属性的类型要求时，会调用实体类的set方法将值赋给该属性
    public Map<String, Object> addCart2Order(@RequestBody List<OrdItem> items) {
        // 获取到登录后的token，从中获取到登录者的信息，从而获取到用户ID
        MyUser user = (MyUser)Token.getUser();
        int uid = user.getId();
        // 如果没有获取到 ID说明没有登录， 则返回401未登录的状态
        if (uid < 0) return RespJson.pack(401, "未登录", null);
        System.out.println("items============" + items);
        // 声明一个新的订单头对象，里面有订单的 uid,ordid,
        // 方便客户立即进行下一步的处理, 而无需查找
        Order order = new Order();
        order.setUid(uid);
        System.out.println("order=============" + order);
        System.out.println("items=============" + items);
        try {
            orderService.addCart2Order(order, items);
        } catch (Exception e) {
            e.printStackTrace();
            return RespJson.pack(500, "成功接收到数据，但更新订单失败", null);
        }
        return RespJson.pack(200, "成功接收到数据，并产生订单", order);
    }

}
